Paradoxical Tumors in Penile Cancer
Summary
The aim of this study is to report the clinicopathologic and outcome features of superficial high-grade and deep low-grade penile squamous cell carcinomas. For this, we used a retrospectively-colleted series of patients with penile cancer, in which we identified 41 cases corresponding to 12 superficial high-grade tumors and 29 deep low-grade tumors. As outcomes we evaluated inguinal lymph node status, presence of tumor relapse, final nodal status, and cancer-specific death. Follow-up ranged from 0.8 to 386.7 months (mean, 152.5 months; median, 157.3 months). Clinicopathologic features were similar between superficial high-grade and deep low-grade tumors, except for a tendendy (Fisher’s exact P = 0.057) of the former to include tumors with a verruciform pattern of growth. A significantly higher proportion of inguinal lymph node metastasis was found in superficial high-grade tumors compared to deep low-grade tumors (80% vs. 20% respectively, Fisher’s exact P = 0.02). No significant differences were found regarding tumor relapse (Fisher’s exact P = 0.52), final nodal status (Mantel-Cox’s P = 0.42), or cancer-related death (Mantel-Cox’s P = 0.52). Our findings suggest that patients with superficial high-grade tumors may be treated differently from patients with deep low-grade tumors, at least to control short-term local disease. Prophylactic inguinal lymphadenectomuy might be indicated in cases of superficial tumors with high-grade histology while in deeply invasive low-grade penile carcinomas a more conservative approach may be considered.
Description of the repository
This repository contains the full statistical analysis of the dataset that was used for the article “Clinicopathologic and Outcome Features of Superficial High-Grade and Deep Low-Grade Squamous Cell Carcinomas of the Penis”. The article is currently under consideration of publication. This repository also contains the following files:
- The final PDF version of the article, as submitted for consideration of publication
- The BibTeX file containing all the references cited in the article
- The R script that was used for analyzing the dataset and write the article
- The R Markdown file used for this report
- The figures included in this repository in PNG format
Data were analyzed using R version 3.1.2 “Pumpkin Helmet” (R Foundation for Statistical Computing, Vienna, Austria). Results were written using RMarkDown inside RStudio version 0.99.292, powered by the knitr package version 1.9 by Yihui Xie.
Building the dataset for analysis
First we loaded the full dataset including 333 patiens with invasive penile squamous cell carcinoma.
Data <- read.csv("Article/PenisSCC_333.csv")
The full dataset is available at http://dx.doi.org/10.6084/m9.figshare.1290997, which also contains the dataset’s codebook. We excluded patients who were lost at follow up in Outcome.
Data <- subset(Data, Outcome != "Lost at follow-up")
We then recoded 3 variables, creating new variables cancer-related death (DOD), final nodal status (Final_Nodal), and anatomical location (Anatomical). Positive cases for Final_Nodalwhere those with lymph node metastasis in the groin dissection, local relapse during follow-up, or unfavorable outcome, including alive with disease and death by cancer. We also reordered Subtype.
# Creating a new variable for cancer-related death
Data$DOD <- ifelse(Data$Outcome == "Died of cancer", c("Yes"), c("No"))
Data$DOD <- factor(Data$DOD)
# Creating a new variable for the final nodal status
## Positive cases where those with:
# Nodal metastasis in lymphadenectomy
Data$Final_Nodal <- ifelse(Data$Mets == "Yes", c("Positive"), c("Negative"))
# Local relapse during follow-up
Data$Final_Nodal[Data$Local == "Yes"] <- "Positive"
# Unfavorable outcome, including alive with disease and death by cancer
Data$Final_Nodal[Data$Outcome == "Alive with disease"] <- "Positive"
Data$Final_Nodal[Data$Outcome == "Died of cancer"] <- "Positive"
Data$Final_Nodal <- factor(Data$Final_Nodal)
# Creating a new variable for anatomical location
Data$Anatomical[Data$Glans == "Yes" &
Data$Sulcus == "No" &
Data$Foreskin == "No"] <- "Glans alone"
Data$Anatomical[Data$Glans == "Yes" &
Data$Sulcus == "Yes" &
Data$Foreskin == "No"] <- "Glans + Coronal sulcus"
Data$Anatomical[Data$Glans == "Yes" &
Data$Sulcus == "Yes" &
Data$Foreskin == "Yes"] <- "Glans + Coronal sulcus + Foreskin"
Data$Anatomical <- factor(Data$Anatomical,
levels = c("Glans alone", "Glans + Coronal sulcus",
"Glans + Coronal sulcus + Foreskin"))
# Releveling variables
Data$Subtype <- factor(Data$Subtype,
levels = c("Usual", "Verrucous", "Papillary", "Warty", "Mixed"))
We finally searched the dataset for cases of superficial high-grade and deep low-grade tumors, using the following criteria:
- Superficial High-Grade Tumors: Grade 3 tumors invading lamina propria or superficial corpus spongiosum (tumor thickness equals to or less than 5 mm).
- Deep Low-Grade Tumors: Grade 1 tumors invading deep corpus spongiosum (tumor thickness equals to or greater than 10 mm) or corpus cavernosum, including tunica albuginea.
We then excluded the missing cases and dropped unused levels.
# Superficial High-Grade Tumors
Data$Paradoxical[Data$Grade == "Grade 3" &
Data$Level == "Lamina propria"] <- "Superficial High-Grade"
Data$Paradoxical[Data$Grade == "Grade 3" &
Data$Level == "Corpus spongiosum" &
Data$Thickness <= 5] <- "Superficial High-Grade"
# Deep Low-Grade Tumors
Data$Paradoxical[Data$Grade == "Grade 1" &
Data$Level == "Corpus cavernosum"] <- "Deep Low-Grade"
Data$Paradoxical[Data$Grade == "Grade 1" &
Data$Level == "Corpus spongiosum" &
Data$Thickness >= 10] <- "Deep Low-Grade"
# Converting to Factor
Data$Paradoxical <- factor(Data$Paradoxical,
levels = c("Superficial High-Grade", "Deep Low-Grade"))
# Excluding missing cases
Data <- Data[complete.cases(Data$Paradoxical), ]
# Dropping unused levels
Data <- droplevels(Data)
Data analysis was carried out on this dataset, using the simpleR package.
library(simpleR)
Methodology
Data analysis is divided in 4 sections, as it follows:
Descriptive Statistics. All the variables included in the dataset were analyzed using bar plots, histograms, box plots, and one-way tables. Factor variables were described using absolute and relative percentages. Numeric variables were described using mean, standard deviation, median, interquartile range, minimum and maximum value.
Inferential Statistics: Statistical tests (Fisher’s exact test for categorical variables, Kruskal-Wallis test for numerical variables) were carried out to compare the clinicopathologic and outcome features between superficial high-grade and deep low-grade tumors. A 2-tailed P value was reported in all instances. Reported statistics included absolute and relative percentages for categorical variables; and mean, standard deviation, median, interquartile range, minimum and maximum value for numeric variables, by tumor type (superficial high-grade vs. deep low-grade).
Survival Analysis. For all variables in the dataset survival curves were built for final nodal status and cancer-related death using the Kaplan-Meier method. Survival curves were compared using the Mantel-Cox (log-rank) test. Numerical variables were splitted in 2 levels using the median as the cutoff point. A 2-tailed P value was reported in all instances.
Logistic Regression Analysis. Odds ratios (OR) with 95% confidence intervals (CI) and their associated P values were estimated for superficial high-grade vs. deep low-grade tumors, considering inguinal lymph node metastasis, tumor relapse, final nodal status, and cancer-related death.
Cox’s Proportional Hazards Regression Analysis. Hazard ratios (OR) with 95% confidence intervals (CI) and their associated P values were estimated for superficial high-grade vs. deep low-grade tumors, considering inguinal lymph node metastasis, tumor relapse, final nodal status, and cancer-related death.
library(knitr)
opts_chunk$set(fig.width = 8, fig.height = 6, message = FALSE, warning = FALSE)
Here it follows the description of all the variables included in the analyzed dataset.
Surgical Procedure for Primary Treatment
Var <- Data$Procedure
categorical.plot(Var)

descriptive.categorical(Var)
| Partial penectomy |
25 |
61 |
| Total penectomy |
16 |
39 |
Number of missing cases: 0 cases.
Histologic Subtype
Var <- Data$Subtype
categorical.plot(Var, align = "h", left =8)

descriptive.categorical(Var)
| Usual |
24 |
58.5 |
| Verrucous |
7 |
17.1 |
| Papillary |
3 |
7.3 |
| Warty |
3 |
7.3 |
| Mixed |
4 |
9.8 |
Number of missing cases: 0 cases.
Anatomical Location
Var <- Data$Anatomical
categorical.plot(Var, align = "h", left = 14)

descriptive.categorical(Var)
| Glans alone |
26 |
63 |
| Glans + Coronal sulcus |
6 |
15 |
| Glans + Coronal sulcus + Foreskin |
9 |
22 |
Number of missing cases: 0 cases.
Anatomical Level of Maximum Tumor Invasion
Var <- Data$Level
categorical.plot(Var, align = "h", left = 9)

descriptive.categorical(Var)
| Corpus cavernosum |
27 |
65.9 |
| Corpus spongiosum |
12 |
29.3 |
| Lamina propria |
2 |
4.9 |
Number of missing cases: 0 cases.
Tumor Size, cm
Var <- Data$Size
numerical.plot(Var, label = "Tumor Size, cm")


descriptive.numerical(Var)
| Mean |
4.8 |
| Standard Deviation |
2 |
| Median |
5 |
| Interquartile Range |
2.9 |
| Mininum |
1.3 |
| Maximum |
9 |
Number of missing cases: 15 cases.
Patient’s Age, years
Var <- Data$Age
numerical.plot(Var, label = "Patient's Age, years")


descriptive.numerical(Var)
| Mean |
56.2 |
| Standard Deviation |
12.3 |
| Median |
55 |
| Interquartile Range |
19 |
| Mininum |
33 |
| Maximum |
85 |
Number of missing cases: 0 cases.
Bilateral Inguinal Lymphadenectomy
Var <- Data$Lymphadenectomy
categorical.plot(Var)

descriptive.categorical(Var)
Number of missing cases: 0 cases.
Tumor Invasion of Penile Urethra
Var <- Data$Urethra
categorical.plot(Var)

descriptive.categorical(Var)
Number of missing cases: 7 cases.
Vascular Invasion
Var <- Data$Vascular
categorical.plot(Var)

descriptive.categorical(Var)
Number of missing cases: 1 cases.
Perineural Invasion
Var <- Data$Perineural
categorical.plot(Var)

descriptive.categorical(Var)
Number of missing cases: 1 cases.
Pathological T Stage
Var <- Data$pT
categorical.plot(Var)

descriptive.categorical(Var)
| T1 |
1 |
2.9 |
| T2 |
18 |
52.9 |
| T3 |
15 |
44.1 |
Number of missing cases: 7 cases.
Tumor Relapse (Local, Regional or Systemic)
Var <- Data$Relapse
categorical.plot(Var)

descriptive.categorical(Var)
Number of missing cases: 1 cases.
Follow-up Length, months
Var <- Data$FollowUp
numerical.plot(Var, label = "Follow-Up, Months")


descriptive.numerical(Var)
| Mean |
152.5 |
| Standard Deviation |
101 |
| Median |
157.3 |
| Interquartile Range |
143.6 |
| Mininum |
0.8 |
| Maximum |
386.7 |
Number of missing cases: 0 cases.
Patient’s Outcome
Var <- Data$Outcome
categorical.plot(Var)

descriptive.categorical(Var)
| Alive with disease |
3 |
7.3 |
| Alive without disease |
23 |
56.1 |
| Died of cancer |
1 |
2.4 |
| Died of other causes |
14 |
34.1 |
Number of missing cases: 0 cases.
Clinical N Stage
Var <- Data$cN
categorical.plot(Var)

descriptive.categorical(Var)
| cN0 |
20 |
50 |
| cN1 |
7 |
18 |
| cN2 |
13 |
32 |
Number of missing cases: 1 cases.
Final Nodal Status
Var <- Data$Final_Nodal
categorical.plot(Var)

descriptive.categorical(Var)
| Negative |
33 |
80 |
| Positive |
8 |
20 |
Number of missing cases: 0 cases.
Var2 <- Data$Paradoxical
Tumor Type and Surgical Procedure
Var1 <- Data$Procedure
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| Partial penectomy |
10 |
83.3 |
15 |
51.7 |
| Total penectomy |
2 |
16.7 |
14 |
48.3 |
Tumor Type and Anatomical Location
Var1 <- Data$Anatomical
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| Glans alone |
7 |
58.3 |
19 |
65.5 |
| Glans + Coronal sulcus |
2 |
16.7 |
4 |
13.8 |
| Glans + Coronal sulcus + Foreskin |
3 |
25.0 |
6 |
20.7 |
Tumor Type and Anatomical Level
Var1 <- Data$Level
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| Corpus cavernosum |
0 |
0.0 |
27 |
93.1 |
| Corpus spongiosum |
10 |
83.3 |
2 |
6.9 |
| Lamina propria |
2 |
16.7 |
0 |
0.0 |
Tumor Type and Tumor Size
Var1 <- Data$Size
numerical.group.plot(Var1, Var2)

descriptive.numerical.group(Var1, Var2)
| Mean |
4.8 |
4.8 |
| Standard Deviation |
3.0 |
1.7 |
| Median |
4.5 |
5.0 |
| Interquartile Range |
4.1 |
2.1 |
| Minimum |
1.3 |
2.0 |
| Maximum |
9.0 |
9.0 |
Tumor Type and Patient’s Age
Var1 <- Data$Age
numerical.group.plot(Var1, Var2)

descriptive.numerical.group(Var1, Var2)
| Mean |
50.8 |
58.4 |
| Standard Deviation |
10.5 |
12.4 |
| Median |
52.5 |
56.0 |
| Interquartile Range |
12.5 |
19.0 |
| Minimum |
33.0 |
37.0 |
| Maximum |
69.0 |
85.0 |
Tumor Type and Urethral Invasion
Var1 <- Data$Urethra
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| No |
6 |
66.7 |
13 |
52 |
| Yes |
3 |
33.3 |
12 |
48 |
Tumor Type and Vascular Invasion
Var1 <- Data$Vascular
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| No |
10 |
83.3 |
26 |
92.9 |
| Yes |
2 |
16.7 |
2 |
7.1 |
Tumor Type and Perineural Invasion
Var1 <- Data$Perineural
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| No |
10 |
83.3 |
24 |
85.7 |
| Yes |
2 |
16.7 |
4 |
14.3 |
Tumor Type and cN Stage
Var1 <- Data$cN
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| cN0 |
8 |
66.7 |
12 |
42.9 |
| cN1 |
0 |
0.0 |
7 |
25.0 |
| cN2 |
4 |
33.3 |
9 |
32.1 |
Tumor Type and pT Stage
Var1 <- Data$pT
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| T1 |
1 |
11.1 |
0 |
0 |
| T2 |
5 |
55.6 |
13 |
52 |
| T3 |
3 |
33.3 |
12 |
48 |
Tumor Type and Tumor Relapse
Var1 <- Data$Relapse
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| No |
11 |
91.7 |
27 |
96.4 |
| Yes |
1 |
8.3 |
1 |
3.6 |
Tumor Type and Final Nodal Status
Var1 <- Data$Final_Nodal
categorical.group.plot(Var1, Var2)

descriptive.categorical.group(Var1, Var2)
| Negative |
8 |
66.7 |
25 |
86.2 |
| Positive |
4 |
33.3 |
4 |
13.8 |
source("RiskTable.R")
x.lab <- "Follow-Up, Months"
y.lab <- "Survival Function"
# Defining outcome variable
Status <- Data$Final_Nodal
# Creating dicotomic variables from numerical variables for plotting
Size_Median <- factor(ifelse(Data$Size > median(Data$Size, na.rm = TRUE),
c("Above Median Size"), c("Below Median Size")))
Age_Median <- factor(ifelse(Data$Age > median(Data$Age, na.rm = TRUE),
c("Above Median Age"), c("Below Median Age")))
# By type of tumor
with(Data, survival.plot(Paradoxical, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Tumor Type"))

with(Data, risk.table(Paradoxical, FollowUp, Status))
Individuals at risk
| Superficial High-Grade |
12 |
11 |
10 |
9 |
6 |
2 |
2 |
| Deep Low-Grade |
29 |
20 |
16 |
12 |
8 |
4 |
2 |
# By surgical procedure
with(Data, survival.plot(Procedure, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Surgical Procedure"))

with(Data, risk.table(Procedure, FollowUp, Status))
Individuals at risk
| Partial penectomy |
25 |
19 |
17 |
14 |
8 |
4 |
3 |
| Total penectomy |
16 |
12 |
9 |
7 |
6 |
2 |
1 |
# By anatomical location
with(Data, survival.plot(Anatomical, FollowUp, Status,
xlab = x.lab, ylab = y.lab, ylim = c(0, 1.09),
title = "Final Nodal Status by Anatomical Location"))

with(Data, risk.table(Anatomical, FollowUp, Status))
Individuals at risk
| Glans alone |
26 |
19 |
14 |
13 |
10 |
3 |
1 |
| Glans + Coronal sulcus |
6 |
5 |
5 |
3 |
2 |
2 |
2 |
| Glans + Coronal sulcus + Foreskin |
9 |
7 |
7 |
5 |
2 |
1 |
1 |
# By anatomical level
with(Data, survival.plot(Level, FollowUp, Status,
xlab = x.lab, ylab = y.lab, ylim = c(0, 1.09),
title = "Final Nodal Status by Anatomical Level"))

with(Data, risk.table(Level, FollowUp, Status))
Individuals at risk
| Corpus cavernosum |
27 |
19 |
15 |
12 |
8 |
| Corpus spongiosum |
12 |
10 |
10 |
8 |
5 |
| Lamina propria |
2 |
2 |
1 |
1 |
1 |
# By median tumor size
with(Data, survival.plot(Size_Median, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Median Tumor Size"))

with(Data, risk.table(Size_Median, FollowUp, Status))
Individuals at risk
| Above Median Size |
9 |
7 |
6 |
5 |
3 |
| Below Median Size |
17 |
11 |
7 |
4 |
2 |
# By median patient's age
with(Data, survival.plot(Age_Median, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Median Patient's Age"))

with(Data, risk.table(Age_Median, FollowUp, Status))
Individuals at risk
| Above Median Age |
19 |
13 |
10 |
7 |
5 |
| Below Median Age |
22 |
18 |
16 |
14 |
9 |
# By urethral invasion
with(Data, survival.plot(Urethra, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Urethral Invasion"))

with(Data, risk.table(Urethra, FollowUp, Status))
Individuals at risk
| No |
19 |
14 |
12 |
10 |
6 |
2 |
1 |
| Yes |
15 |
11 |
9 |
7 |
4 |
3 |
3 |
# By vascular invasion
with(Data, survival.plot(Vascular, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Vascular Invasion"))

with(Data, risk.table(Vascular, FollowUp, Status))
Individuals at risk
| No |
36 |
27 |
22 |
17 |
12 |
| Yes |
4 |
3 |
3 |
3 |
2 |
# By perineural invasion
with(Data, survival.plot(Perineural, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Perineural Invasion"))

with(Data, risk.table(Perineural, FollowUp, Status))
Individuals at risk
| No |
34 |
26 |
21 |
16 |
11 |
5 |
| Yes |
6 |
4 |
4 |
4 |
3 |
1 |
# By pathological T stage
with(Data, survival.plot(pT, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Pathological T Stage"))

with(Data, risk.table(pT, FollowUp, Status))
Individuals at risk
| T1 |
1 |
1 |
| T2 |
18 |
13 |
| T3 |
15 |
11 |
# By clinical N stage
with(Data, survival.plot(cN, FollowUp, Status,
xlab = x.lab, ylab = y.lab,
title = "Final Nodal Status by Clinical N Stage"))

with(Data, risk.table(cN, FollowUp, Status))
Individuals at risk
| cN0 |
20 |
16 |
13 |
| cN1 |
7 |
3 |
2 |
| cN2 |
13 |
11 |
10 |
# Defining outcome variable
Status <- Data$DOD
# Creating dicotomic variables from numerical variables for plotting
Size_Median <- factor(ifelse(Data$Size > median(Data$Size, na.rm = TRUE),
c("Above Median Size"), c("Below Median Size")))
Age_Median <- factor(ifelse(Data$Age > median(Data$Age, na.rm = TRUE),
c("Above Median Age"), c("Below Median Age")))
# By type of tumor
with(Data, survival.plot(Paradoxical, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Tumor Type"))

with(Data, risk.table(Paradoxical, FollowUp, Status))
Individuals at risk
| Superficial High-Grade |
12 |
11 |
10 |
9 |
6 |
2 |
2 |
| Deep Low-Grade |
29 |
20 |
16 |
12 |
8 |
4 |
2 |
# By surgical procedure
with(Data, survival.plot(Procedure, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Surgical Procedure"))

with(Data, risk.table(Procedure, FollowUp, Status))
Individuals at risk
| Partial penectomy |
25 |
19 |
17 |
14 |
8 |
4 |
3 |
| Total penectomy |
16 |
12 |
9 |
7 |
6 |
2 |
1 |
# By anatomical location
with(Data, survival.plot(Anatomical, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Anatomical Location"))

with(Data, risk.table(Anatomical, FollowUp, Status))
Individuals at risk
| Glans alone |
26 |
19 |
14 |
13 |
10 |
3 |
1 |
| Glans + Coronal sulcus |
6 |
5 |
5 |
3 |
2 |
2 |
2 |
| Glans + Coronal sulcus + Foreskin |
9 |
7 |
7 |
5 |
2 |
1 |
1 |
# By anatomical level
with(Data, survival.plot(Level, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Anatomical Level"))

with(Data, risk.table(Level, FollowUp, Status))
Individuals at risk
| Corpus cavernosum |
27 |
19 |
15 |
12 |
8 |
| Corpus spongiosum |
12 |
10 |
10 |
8 |
5 |
| Lamina propria |
2 |
2 |
1 |
1 |
1 |
# By median tumor size
with(Data, survival.plot(Size_Median, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Median Tumor Size"))

with(Data, risk.table(Size_Median, FollowUp, Status))
Individuals at risk
| Above Median Size |
9 |
7 |
6 |
5 |
3 |
| Below Median Size |
17 |
11 |
7 |
4 |
2 |
# By median patient's age
with(Data, survival.plot(Age_Median, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Median Patient's Age"))

with(Data, risk.table(Age_Median, FollowUp, Status))
Individuals at risk
| Above Median Age |
19 |
13 |
10 |
7 |
5 |
| Below Median Age |
22 |
18 |
16 |
14 |
9 |
# By urethral invasion
with(Data, survival.plot(Urethra, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Urethral Invasion"))

with(Data, risk.table(Urethra, FollowUp, Status))
Individuals at risk
| No |
19 |
14 |
12 |
10 |
6 |
2 |
1 |
| Yes |
15 |
11 |
9 |
7 |
4 |
3 |
3 |
# By vascular invasion
with(Data, survival.plot(Vascular, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Vascular Invasion"))

with(Data, risk.table(Vascular, FollowUp, Status))
Individuals at risk
| No |
36 |
27 |
22 |
17 |
12 |
| Yes |
4 |
3 |
3 |
3 |
2 |
# By perineural invasion
with(Data, survival.plot(Perineural, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Perineural Invasion"))

with(Data, risk.table(Perineural, FollowUp, Status))
Individuals at risk
| No |
34 |
26 |
21 |
16 |
11 |
5 |
| Yes |
6 |
4 |
4 |
4 |
3 |
1 |
# By pathological T stage
with(Data, survival.plot(pT, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Pathological T Stage"))

with(Data, risk.table(pT, FollowUp, Status))
Individuals at risk
| T1 |
1 |
1 |
| T2 |
18 |
13 |
| T3 |
15 |
11 |
# By clinical N stage
with(Data, survival.plot(cN, FollowUp, Status,
ylim = c(0.6, 1), position = "bottomright", xlab = x.lab, ylab = y.lab,
title = "Cancer-Related Death by Clinical N Stage"))

with(Data, risk.table(cN, FollowUp, Status))
Individuals at risk
| cN0 |
20 |
16 |
13 |
| cN1 |
7 |
3 |
2 |
| cN2 |
13 |
11 |
10 |
# Creating variables for GLM analysis
Paradoxical_Inv <- factor(Data$Paradoxical,
levels = c("Deep Low-Grade", "Superficial High-Grade"))
Data$Multicompartment <- factor(ifelse(Data$Anatomical == "Glans alone",
c("No"), c("Yes")))
Data$CC <- factor(ifelse(Data$Level == "Corpus cavernosum",
c("Yes"), c("No")))
Data$High_pT <- factor(ifelse(Data$pT == "T3",
c("Yes"), c("No")))
Data$cN_Positive <- factor(ifelse(Data$cN == "cN0",
c("No"), c("Yes")))
# Creating list of variables and labels
Predictors <- with(Data, list(
"Superficial high-grade vs. deep low-grade" = Paradoxical_Inv,
"Primary treatment" = Procedure,
"Age > median" = Age_Median,
"Multicompartment tumor" = Multicompartment,
"Invasion of corpus cavernosum" = CC,
"Tumor size > median" = Size_Median,
"Invasion of penile urethra" = Urethra,
"Vascular invasion" = Vascular,
"Perineural invasion" = Perineural,
"High pT (>pT3)" = High_pT,
"Positive clinical nodes" = cN_Positive
))
Varlabels <- names(Predictors)
Tumor Relapse
Outcome <- Data$Relapse
logistic.table(Outcome, Predictors, Varlabels)
| Superficial high-grade vs. deep low-grade |
2.45 |
0.092 |
65.89 |
0.54 |
| Primary treatment |
1.71 |
0.064 |
45.68 |
0.71 |
| Age > median |
0.81 |
0.03 |
21.49 |
0.88 |
| Multicompartment tumor |
1.4e-08 |
NA |
Inf |
1 |
| Invasion of corpus cavernosum |
0.52 |
0.019 |
13.87 |
0.65 |
| Tumor size > median |
0.50 |
0.018 |
13.76 |
0.64 |
| Invasion of penile urethra |
1.21 |
0.045 |
32.60 |
0.89 |
| Vascular invasion |
1.4e-07 |
NA |
2.4e+227 |
1 |
| Perineural invasion |
6.40 |
0.23 |
180.98 |
0.21 |
| High pT (>pT3) |
1.21 |
0.045 |
32.60 |
0.89 |
| Positive clinical nodes |
9.5e+07 |
1.8e-282 |
NA |
1 |
Final Nodal Status
Outcome <- Data$Final_Nodal
logistic.table(Outcome, Predictors, Varlabels)
| Superficial high-grade vs. deep low-grade |
3.12 |
0.61 |
16.27 |
0.16 |
| Primary treatment |
0.45 |
0.06 |
2.31 |
0.37 |
| Age > median |
0.44 |
0.08 |
2.11 |
0.31 |
| Multicompartment tumor |
1.05 |
0.19 |
5.08 |
0.95 |
| Invasion of corpus cavernosum |
0.43 |
0.086 |
2.17 |
0.3 |
| Tumor size > median |
0.75 |
0.10 |
6.70 |
0.78 |
| Invasion of penile urethra |
0.70 |
0.12 |
3.48 |
0.67 |
| Vascular invasion |
18.60 |
1.96 |
421.69 |
0.019 |
| Perineural invasion |
5.80 |
0.87 |
40.60 |
0.064 |
| High pT (>pT3) |
0.70 |
0.12 |
3.48 |
0.67 |
| Positive clinical nodes |
1.89 |
0.40 |
10.50 |
0.43 |
Tumor Relapse
Outcome <- Data$Relapse
cox.table(Outcome, FU, Predictors, Varlabels)
| Superficial high-grade vs. deep low-grade |
2.04 |
0.13 |
32.62 |
0.62 |
| Primary treatment |
1.61 |
0.10 |
25.78 |
0.74 |
| Age > median |
0.74 |
0.046 |
11.81 |
0.83 |
| Multicompartment tumor |
2.6e-09 |
0.00 |
Inf |
0.17 |
| Invasion of corpus cavernosum |
0.62 |
0.039 |
9.99 |
0.74 |
| Tumor size > median |
0.57 |
0.035 |
9.06 |
0.69 |
| Invasion of penile urethra |
1.37 |
0.085 |
22.01 |
0.82 |
| Vascular invasion |
1.3e-08 |
0.00 |
Inf |
0.55 |
| Perineural invasion |
6.09 |
0.38 |
97.49 |
0.23 |
| High pT (>pT3) |
1.37 |
0.085 |
22.01 |
0.82 |
| Positive clinical nodes |
1.7e+09 |
0.00 |
Inf |
0.092 |
Final Nodal Status
Outcome <- Data$Final_Nodal
cox.table(Outcome, FU, Predictors, Varlabels)
| Superficial high-grade vs. deep low-grade |
1.77 |
0.44 |
7.14 |
0.43 |
| Primary treatment |
0.57 |
0.12 |
2.84 |
0.48 |
| Age > median |
0.38 |
0.089 |
1.59 |
0.17 |
| Multicompartment tumor |
1.10 |
0.26 |
4.63 |
0.9 |
| Invasion of corpus cavernosum |
0.65 |
0.16 |
2.60 |
0.54 |
| Tumor size > median |
1.06 |
0.17 |
6.47 |
0.95 |
| Invasion of penile urethra |
0.83 |
0.20 |
3.46 |
0.79 |
| Vascular invasion |
4.63 |
1.09 |
19.62 |
0.058 |
| Perineural invasion |
2.91 |
0.69 |
12.28 |
0.17 |
| High pT (>pT3) |
0.83 |
0.20 |
3.46 |
0.79 |
| Positive clinical nodes |
2.12 |
0.50 |
9.06 |
0.3 |